export default class Dep{
    /**
     * 构造方法
     */
    constructor(){
        console.log("constructor");
        this.subs=[];
    }

    /**
     * 添加一个节点
     * @param sub
     */
    addSub(sub){
        console.log("addSub");
        this.subs.push(sub)
    }

    /**
     * 移除一个节点
     * @param sub
     */
    removeSub(sub){
        console.log("removeSub");
        this.remove(this.subs,sub);
    }

    /**
     * 添加依赖
     */
    depend(){
        console.log("depend");
        if(window.target){
            console.log(window.target);
            this.addSub(window.target);
        }
    }

    /**
     * 通知更新
     */
    notify(){
        //slice可以从原数组中浅拷贝一份数据到新数组中
        console.log("notify");
        const subs=this.subs.slice();
        for(let i=0;i<subs.length;i++){
            subs[i].update();
        }
    }

    remove(arr,item){
        if(arr.length){
            //定义当前节点所在的位置
            const index=arr.indexOf(item);
            if(index>-1){
                //splice(索引项,要删除的数量)
                return arr.splice(index,1)
            }
        }
    }
}